﻿// Decompiled with JetBrains decompiler
// Type: TaleWorlds.CampaignSystem.ComponentInterfaces.SiegeEventModel
// Assembly: TaleWorlds.CampaignSystem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: E85F8C15-4DF6-4E9C-A58A-29177E40D07A
// Assembly location: D:\steam\steamapps\common\Mount & Blade II Bannerlord\bin\Win64_Shipping_Client\TaleWorlds.CampaignSystem.dll

using System.Collections.Generic;
using TaleWorlds.CampaignSystem.Party;
using TaleWorlds.CampaignSystem.Roster;
using TaleWorlds.CampaignSystem.Settlements;
using TaleWorlds.CampaignSystem.Siege;
using TaleWorlds.Core;

#nullable disable
namespace TaleWorlds.CampaignSystem.ComponentInterfaces
{
  public abstract class SiegeEventModel : GameModel
  {
    public abstract int GetSiegeEngineDestructionCasualties(
      SiegeEvent siegeEvent,
      BattleSideEnum side,
      SiegeEngineType destroyedSiegeEngine);

    public abstract float GetCasualtyChance(
      MobileParty siegeParty,
      SiegeEvent siegeEvent,
      BattleSideEnum side);

    public abstract int GetColleteralDamageCasualties(
      SiegeEngineType attackerSiegeEngine,
      MobileParty party);

    public abstract float GetSiegeEngineHitChance(
      SiegeEngineType siegeEngineType,
      BattleSideEnum battleSide,
      SiegeBombardTargets target,
      Town town);

    public abstract string GetSiegeEngineMapPrefabName(
      SiegeEngineType siegeEngineType,
      int wallLevel,
      BattleSideEnum side);

    public abstract string GetSiegeEngineMapProjectilePrefabName(SiegeEngineType siegeEngineType);

    public abstract string GetSiegeEngineMapReloadAnimationName(
      SiegeEngineType siegeEngineType,
      BattleSideEnum side);

    public abstract string GetSiegeEngineMapFireAnimationName(
      SiegeEngineType siegeEngineType,
      BattleSideEnum side);

    public abstract sbyte GetSiegeEngineMapProjectileBoneIndex(
      SiegeEngineType siegeEngineType,
      BattleSideEnum side);

    public abstract float GetSiegeStrategyScore(
      SiegeEvent siege,
      BattleSideEnum side,
      SiegeStrategy strategy);

    public abstract float GetConstructionProgressPerHour(
      SiegeEngineType type,
      SiegeEvent siegeEvent,
      ISiegeEventSide side);

    public abstract MobileParty GetEffectiveSiegePartyForSide(
      SiegeEvent siegeEvent,
      BattleSideEnum side);

    public abstract float GetAvailableManDayPower(ISiegeEventSide side);

    public abstract IEnumerable<SiegeEngineType> GetAvailableAttackerRangedSiegeEngines(
      PartyBase party);

    public abstract IEnumerable<SiegeEngineType> GetAvailableDefenderSiegeEngines(PartyBase party);

    public abstract IEnumerable<SiegeEngineType> GetAvailableAttackerRamSiegeEngines(PartyBase party);

    public abstract IEnumerable<SiegeEngineType> GetAvailableAttackerTowerSiegeEngines(
      PartyBase party);

    public abstract IEnumerable<SiegeEngineType> GetPrebuiltSiegeEnginesOfSettlement(
      Settlement settlement);

    public abstract IEnumerable<SiegeEngineType> GetPrebuiltSiegeEnginesOfSiegeCamp(
      BesiegerCamp camp);

    public abstract float GetSiegeEngineHitPoints(
      SiegeEvent siegeEvent,
      SiegeEngineType siegeEngine,
      BattleSideEnum battleSide);

    public abstract int GetRangedSiegeEngineReloadTime(
      SiegeEvent siegeEvent,
      BattleSideEnum side,
      SiegeEngineType siegeEngine);

    public abstract float GetSiegeEngineDamage(
      SiegeEvent siegeEvent,
      BattleSideEnum battleSide,
      SiegeEngineType siegeEngine,
      SiegeBombardTargets target);

    public abstract FlattenedTroopRoster GetPriorityTroopsForSallyOutAmbush();
  }
}
